#include <stdio.h>

// 定义VehSigSrc的位偏移
#define SPEED_OFFSET 6
#define TURN_OFFSET 4
#define REVERSE_OFFSET 2
#define DOOR_OFFSET 0
#define DOOR_LOCK_OFFSET 6
#define ACC_OFFSET 4

// 解析VehSigSrc
void parseVehSigSrc(unsigned short vehSigSrc) {
    unsigned char speed = (vehSigSrc >> SPEED_OFFSET) & 0x03;
    unsigned char turn = (vehSigSrc >> TURN_OFFSET) & 0x03;
    unsigned char reverse = (vehSigSrc >> REVERSE_OFFSET) & 0x03;
    unsigned char door = (vehSigSrc >> DOOR_OFFSET) & 0x03;
    unsigned char doorLock = (vehSigSrc >> DOOR_LOCK_OFFSET) & 0x03;
    unsigned char acc = (vehSigSrc >> ACC_OFFSET) & 0x03;

    printf("车速: %d\n", speed);
    printf("左、右转: %d\n", turn);
    printf("倒挡: %d\n", reverse);
    printf("开车门: %d\n", door);
    printf("车门锁: %d\n", doorLock);
    printf("ACC: %d\n", acc);
}

int main() {
    unsigned short vehSigSrc;// 用实际的值替换这里的示例值
    //parseVehSigSrc(vehSigSrc);
    unsigned char byte0 = 0x00;
    unsigned char byte1 = 0x00;

    // 设置車速来源为CAN（二进制为01）
    byte0 &= ~(0b11 << 6); // 先清除原来的值
    byte0 |= (0b01 << 6); // 设置新的值

    // 设置左、右轉为IO（二进制为00）
    byte0 &= ~(0b11 << 4); // 先清除原来的值
    byte0 |= (0b00 << 4); // 设置新的值

    // 设置倒檔为GPS（二进制为10）
    byte0 &= ~(0b11 << 2); // 先清除原来的值
    byte0 |= (0b10 << 2); // 设置新的值

    // 设置開車門为未知/无效值（二进制为10）
    byte0 &= ~0b11; // 清除
    byte0 |= 0b11; // 设置新的值
    
    // 设置车门锁为IO（二进制为00）
    byte1 &= ~(0b11 << 6); // 先清除原来的值
    byte1 |= (0b00 << 6); // 设置新的值

    // 设置ACC为CAN（二进制为01）
    byte1 &= ~(0b11 << 4); // 先清除原来的值
    byte1 |= (0b01 << 4); // 设置新的值

    printf("byte0: 0x%02x\n", byte0);
    printf("byte1: 0x%02x\n", byte1);
    
    vehSigSrc = (byte0 << 8) | byte1;
    printf("ACC: 0x%04x\n", vehSigSrc);

    return 0;
}
